# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/9/17
# @File : 6.Two Sets II.py

#分成两部分。
def solve(n,part):
    dp = [0] * (part + 1)
    dp[0] = 1
    for i in range(1,n):
        for j in range(part, i - 1, -1):
            dp[j] = dp[j]+dp[j - i]
    return dp[-1]

"""
可以遍历到n，然后结果除2、也可以遍历到n-1，取n-1的结果。
因为考虑到每个数都只在一半的子集和中出现，所以，有n组成的子集和数（方法数）等于没n组成的子集和数（方法数），
所以没n组成的子集和数就是n-1的结果。
**till n-1 as we permanently put n into a particular subset to avoid repeats**
"""
# 每个数都必须是在一对子集和中出现一次，因为是分成两部分，而且每个数也不能出现两次。
"""
{1,3,4,6} and {2,5,7}
{1,2,5,6} and {3,4,7}
{1,2,4,7} and {3,5,6}
{1,6,7} and {2,3,4,5}
"""
if __name__ == '__main__':
    n = int(input())
    total = (n+1)*n//2
    part = total//2#肯定等于总和的一半，2x=total
    if(total%2 == 1):
        print(0)
    else:
        ans = solve(n,part)
        modulo = 10 ** 9 + 7
        print(ans%modulo)

